package polymorphic05;

public class Person {

    // 可以饲养所有动物                原理 ： 多态  父类引用指向子类对象
    public void feed(Animal a){  // Animal a = new Cat()
                                 // Animal a = new Bird()
                                // 其他动物
        /* a.eat();// 我们通过多态调用子类共有行为，可以提高代码复用性

        Cat c = (Cat)a; // 把猫重新回归本色，原来扮演动物角色，现在扮演猫角色
                        //  Cat c = (Cat)a = Animal a = new Cat()
                        // 所以 Cat c = new Cat();

                       // 当传入new Bird(),此时相当于Cat c = (Cat)a=new Bira()
                       // 由于猫和鸟是两个平级关系事物，所以p.feed(bird);在此处报错
        c.catchMouse();
        */

        if(a instanceof Cat){ // 当传入new Cat() 检测Cat temp = new Cat()  正确 继续执行
            Cat c = (Cat) a;  // 当传入new Bird() 检测Bird temp = new Cat() 错误 跳过判断代码
            c.catchMouse();
        }else if (a instanceof Bird){
            Bird b = (Bird)a;  // 传入new Bird() 检测Bird temp = new Bird() 正确  执行判断代码
            b.fly();
        }

    }
}
